home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / freeWAIS-sf-1.1 / README < prev    next >
Text File  |  1995-07-27  |  73KB  |  1,962 lines

  1.  
  2.  
  3.  
  4.  
  5.                                             FreeWAIS-sf*
  6.  
  7.  
  8.  
  9.                                                  Ulrich Pfeifer
  10.  
  11.                                                   Tung Huynhz
  12.  
  13.                                          University of Dortmund
  14.  
  15.                                          Lehrstuhl Informatik VI
  16.  
  17.                                             D-44221 Dortmund
  18.  
  19.  
  20.                                               January 10, 1995
  21.  
  22.  
  23.  
  24.                                                       Abstract
  25.  
  26.              FreeWAIS-sf1  is an extension of the freeWAIS software provided by the the
  27.          Clearinghouse for Networked Information Discovery and Retrieval (CNIDR)2 .
  28.          The SF suf#x in the software name stands for "structured3  #elds," an indexing
  29.          and search feature which distinguishes this software from its predecessors.
  30.          It is based on the  version 0.2024 of this software but includes and enhances much
  31.          of what  freeWAIS-0.35 contains.
  32.          Major extensions of FreeWAIS-sf include:
  33.  
  34.              o  Introduction of text, date, and numeric #eld structures within a document,
  35.                 which allows a document to be indexed using potentially overlapping #elds.
  36.  
  37.              o  Support for complex Boolean searches (a query parser is integrated in the
  38.                 server).
  39.  
  40.              o  Stemming and phonetic coding may be switched on and off for each indivi-
  41.                 dual #eld.
  42.  
  43.              o  De#nition of document format and layout of the headlines are now con#-
  44.                 gurable by a new speci#cation language based on regular expressions.  No
  45.                 C-code must be written to index new document types.
  46.  
  47.              o  Installation procedure now just requires running a sh script and answering
  48.                 simple questions.  The script is generated using the GNU  autoconf6 utility.
  49.                 No Make#le sets for individual systems are necessary. For development pur-
  50.                 poses, additional Imake#les are provided since the Make#les do not contain
  51.                 dependencies
  52.  
  53.              o  Support for country speci#c character sets (8-Bit)
  54.  
  55.              o  Lots of bug #xes.
  56.  
  57.          All changes are restricted to the indexer and server to allow existing clients to query
  58.          FreeWAIS-sf databases.  Document types contained in the original distribution
  59.          remain intact.  You can use FreeWAIS-sf as you would use original freeWAIS or
  60.          take advantage of its enhanced features.
  61.  
  62.  
  63.  
  64. ________________________________________________*
  65.      You can get a  Postscript Versionyof this document.
  66.     zemail: {pfeifer,huynh1}@ls6.informatik.uni-dortmund.de
  67.     1ftp://ls6-www.informatik.uni-dortmund.de/pub/wais/freeWAIS-sf-1.1/freeWAIS-sf-1.1.tgz
  68.     2http://cnidr.org/welcome.html
  69.     3Histoically the #s# meant #soundex#
  70.     4ftp://nic.switch.ch/mirror/wais/servers/freeWAIS/freeWAIS-0.202.tar.Z
  71.     5ftp://ftp.bio.indiana.edu/util/wais/freeWAIS-0.3.tar.gz
  72.     6ftp://hpcsos.col.hp.com/mirrors/.hpib0/gnu/autoconf-1.10.tar.gz
  73.  
  74.  
  75.  
  76.                                                            1
  77.  
  78.  
  79.  
  80.  
  81. 1      Supported Systems
  82.  
  83.  
  84. FreeWAIS-sf is known to compile cleanly on many different UNIX platforms, particularly
  85. using the GNU C compiler. The known platforms include:
  86.  
  87.  
  88. OS                  Version        Hardware          Compiler
  89. ____________________________________________
  90. A/UX              3.1                mc68040            gcc  2.5.7
  91. AIX                2                    0000001964      cc
  92. AIX                2                    0000008314      cc
  93. AIX                2                    0000024535      cc
  94. AIX                2                    000003085C      cc
  95. AIX                2                    0000052366      cc
  96. AIX                2                    0000056118      cc
  97. AIX                2                    0000061138      cc
  98. AIX                2                    0000080931      cc
  99. AIX                2                    0000091446      cc
  100. AIX                2                    0000195011      cc
  101. AIX                2                    0000201518      cc
  102. AIX                2                    0000261834      cc
  103. AIX                2                    0000298037      cc
  104. AIX                2                    0000334735      cc
  105. AIX                2                    0000420476      cc
  106. AIX                2                    0000603735      cc
  107. AIX                2                    0000610646      cc
  108. AIX                2                    0000826246      cc
  109. AIX                2                    0000840341      cc
  110. AIX                2                    0002048547      cc
  111. AIX                2                    0003809731      cc
  112. BSD/386        1.0                i386                  gcc
  113. BSD/386        1.1                i386                  gcc
  114. FreeBSD        1.1.5(RELE  i386                  gcc
  115. FreeBSD        1.1.5.1(RE  i386                  gcc
  116. HP-UX            A.09.00        9000/822          gcc  2.5.6
  117. HP-UX            A.09.01        9000/720          gcc  2.5.8
  118. HP-UX            A.09.01        9000/755          gcc  2.5.8
  119. HP-UX            A.09.04        9000/816          gcc  2.5.8
  120. HP-UX            A.09.04        9000/887          gcc  2.3.3
  121. HP-UX            A.09.05        9000/715          cc
  122. IRIX              4.0.5F          IP20                  gcc  2.5.2
  123. IRIX              5.2                IP19                  cc
  124. IRIX              5.2                IP22                  gcc  2.5.8
  125. Linux            1.0.8            i486                  gcc  2.5.8
  126. Linux            1.0.9            i486                  gcc  2.5.8
  127. Linux            1.1.18          i486                  gcc  2.5.8
  128. Linux            1.1.18          i586                  gcc  2.5.8
  129. Linux            1.1.33          i486                  gcc  2.5.7
  130. Linux            1.1.45          i486                  gcc  2.6.0
  131. Linux            1.1.47          i486                  gcc  2.5.8
  132. Linux            1.1.49          i486                  gcc  2.5.8
  133. Linux            1.1.50          i486                  gcc  2.5.8
  134. Linux            1.1.51          i486                  gcc  2.5.8
  135. Linux            1.1.52          i486                  gcc  2.6.0
  136. Linux            1.1.55          i486                  gcc  2.5.8
  137.  
  138.  
  139.  
  140.                                                            2
  141.  
  142.  
  143.  
  144.  
  145. Linux            1.1.57          i486                  gcc  2.5.8
  146. Linux            1.1.59          i486                  gcc  2.5.8
  147. Linux            1.1.60          i486                  gcc  2.5.8
  148. Linux            1.1.61          i486                  gcc  2.5.8
  149. Linux            1.1.62          i486                  gcc  2.5.7
  150. Linux            1.1.64          i486                  gcc  2.5.8
  151. Linux            1.1.65          i486                  gcc  2.5.8
  152. Linux            1.1.70          i486                  gcc  2.5.8
  153. OSF1              V2.0              alpha                cc
  154. OSF1              V2.0              alpha                gcc  2.5.4
  155. OSF1              V2.1              alpha                cc
  156. OSF1              V2.1              alpha                gcc  2.5.8
  157. OSF1              V2.1              alpha                gcc  2.6.0
  158. OSF1              V3.0              alpha                cc
  159. SunOS            4.1.1            sun4c                cc
  160. SunOS            4.1.1            sun4c                gcc  2.5.8
  161. SunOS            4.1.1            sun4c                gcc  2.6.1
  162. SunOS            4.1.1-JL      sun4c                gcc  2.6.2
  163. SunOS            4.1.2            sun4                  cc
  164. SunOS            4.1.2            sun4                  gcc  2.5.8
  165. SunOS            4.1.2            sun4c                cc
  166. SunOS            4.1.2            sun4c                gcc  2.2.2
  167. SunOS            4.1.2            sun4c                gcc  2.4.2
  168. SunOS            4.1.2            sun4c                gcc  2.4.5
  169. SunOS            4.1.2            sun4c                gcc  2.5.8
  170. SunOS            4.1.3            sun4                  gcc  2.5.8
  171. SunOS            4.1.3            sun4c                cc
  172. SunOS            4.1.3            sun4c                gcc  2.3.3
  173. SunOS            4.1.3            sun4c                gcc  2.5.5
  174. SunOS            4.1.3            sun4c                gcc  2.5.8
  175. SunOS            4.1.3            sun4m                acc
  176. SunOS            4.1.3            sun4m                cc
  177. SunOS            4.1.3            sun4m                gcc  2.3.2
  178. SunOS            4.1.3            sun4m                gcc  2.3.3
  179. SunOS            4.1.3            sun4m                gcc  2.5.6
  180. SunOS            4.1.3            sun4m                gcc  2.5.7
  181. SunOS            4.1.3            sun4m                gcc  2.5.8
  182. SunOS            4.1.3            sun4m                gcc  2.6.1
  183. SunOS            4.1.3-JL      sun4c                gcc  2.5.8
  184. SunOS            4.1.3C          sun4m                gcc  2.5.8
  185. SunOS            4.1.3_Axil  sun4m                gcc  2.6.0
  186. SunOS            4.1.3_U1      sun4c                gcc  2.4.5
  187. SunOS            4.1.3_U1      sun4c                gcc  2.5.8
  188. SunOS            4.1.3_U1      sun4m                cc
  189. SunOS            4.1.3_U1      sun4m                gcc
  190. SunOS            4.1.3_U1      sun4m                gcc  2.4.2
  191. SunOS            4.1.3_U1      sun4m                gcc  2.5.7
  192. SunOS            4.1.3_U1      sun4m                gcc  2.5.8
  193. SunOS            4.1.3_U1      sun4m                gcc  2.6.0
  194. SunOS            5.2                sun4c                gcc  2.5.6
  195. SunOS            5.2                sun4m                gcc  2.5.6
  196. SunOS            5.3                sun4c                gcc  2.5.6
  197. SunOS            5.3                sun4c                gcc  2.5.8
  198. SunOS            5.3                sun4d                gcc  2.4.5
  199.  
  200.  
  201.  
  202.                                                            3
  203.  
  204.  
  205.  
  206.  
  207. SunOS            5.3                sun4d                gcc  2.5.6
  208. SunOS            5.3                sun4d                gcc  2.5.7
  209. SunOS            5.3                sun4d                gcc  2.5.8
  210. SunOS            5.3                sun4m                acc
  211. SunOS            5.3                sun4m                gcc
  212. SunOS            5.3                sun4m                gcc  2.4.5
  213. SunOS            5.3                sun4m                gcc  2.5.6
  214. SunOS            5.3                sun4m                gcc  2.5.7
  215. SunOS            5.3                sun4m                gcc  2.5.8
  216. SunOS            5.3                sun4m                gcc  2.6.0
  217. SunOS            5.3                sun4m                gcc  2.6.1
  218. SunOS            5.4                i86pc                gcc  2.5.8
  219. ULTRIX          4.2                RISC                  gcc  2.5.6
  220. ULTRIX          4.3                RISC                  gcc  2.5.6
  221. ULTRIX          4.3                RISC                  gcc  2.5.8
  222. ULTRIX          4.3                RISC                  gcc  2.6.1
  223. ULTRIX          4.4                RISC                  gcc  2.6.3
  224. dgux              5.4R2.10      AViiON              gcc
  225. dgux              5.4R2.10      AViiON              gcc  2.4.1
  226.  
  227.  
  228. This is not an exhaustive list of supported platforms but represents those systems reported
  229. to the authors.  If you have ported FreeWAIS-sf to an additional platform, please provide
  230. the name, OS number, and compiler used to the authors for inclusion in updated release
  231. notes.
  232.  
  233.  
  234.  
  235. 2      History
  236.  
  237.  
  238. Development of FreeWAIS-sf was begun in Summer 1993 as bug #xes for version 0.202
  239. of the CNIDR distribution.  These #xes included boolean operators, partial match search
  240. and phonetic indexing.  We mailed the #xes to CNIDR but received no acknowledgement.
  241. We decided to redesign the server to parse the queries since we felt that boolean operations
  242. cannot be performed correctly without ensuring that the query conforms to a syntax.  At
  243. the same time we felt that adding C-code for indexing new document formats is too much
  244. to require of most data or system system administrators.  We also saw a need to split up
  245. documents into a number of different #elds with possibly different indexing methods.
  246. Since  feedback  from  CNIDR  was  still  missing  in  February  1994,  we  released  our  #rst
  247. version called freeWAIS-0.2-sf-alpha.tar.gz. This #rst version used Imake#les
  248. for installation and was successfully compiled on many systems. Due to #xes to installation
  249. code and numerous bug #xes 8 subsequent versions (through freeWAIS-0.2-sf09--
  250. alpha.tar.gz) were released.
  251. Since  this  last  alpha  version  contained  most  of  the  features  we  want  to  implement,  we
  252. generated the #rst beta version. Many people, (namely running AIX and DG/UX systems)
  253. had no working imake on their machines, we added a con#gure script generated by autoconf
  254. for  the  installation  procedure.   This  script  generates  templates  containing  system  and
  255. installation information.  Simple make#les are thereby generated which allow compilation
  256. and installation of FreeWAIS-sf on a great variety of systems.  See the list of supported
  257. systems in Section 1. This Make#les do not contain dependencies of the generated #les. To
  258. recompile after changes, run make  clean then make  all or use Make#les generated
  259. by imake. The last beta version was  freeWAIS-0.2-sf-beta-05.tar.gz7
  260. At this time we decided not to wait for CNIDR, which seems mainly concerned with the
  261. Z39.50 Version 38  de#nition and differentiate this version from the CNIDR products by
  262. ________________________________________________7
  263.     8ftp://ls6-www.informatik.uni-dortmund.de/pub/wais/beta-05/freeWAIS-0.2-sf-beta-05.tar.gz
  264.      http://www.research.att.com/ wald/z3950.html
  265.  
  266.  
  267.  
  268.                                                            4
  269.  
  270.  
  271.  
  272.  
  273. dropping the -0.2- in the name.
  274. During July, August and September we removed some bugs in memory handling. Purify is
  275. now completely happy with waisindex, waissearch and waisserver.  For more
  276. information on some minor changes, look at sections 2.3 to 2.9.
  277. A couple of beta testers spent their time for porting to other systems.  From all the people
  278. helped us with comments, suggestions and patches (63 netters!), we would like to mention
  279. the following (which had a really hard time):
  280.  
  281.            Eric Hagberg                                             <hagberg@med.cornell.edu>
  282.            Steve Hsieh <steveh@eecs.umich.edu>
  283.            Douglas D. Nebert                                        <ddnebert@usgs.gov>
  284.            Jean-Philippe Martin-Flatin                              <syj@ecmwf.co.uk>
  285.  
  286. Thank you all!
  287. After that we be released
  288.  
  289.  
  290.                                             freeWAIS-sf-1.1
  291.  
  292.  
  293. in September 1994.
  294.  
  295.  
  296.  
  297. Releases
  298.  
  299.  
  300. 2.1      1.1
  301.  
  302. Patches 1-9 for 1.0 are integrated.  Also ctypes are faster now.  Added #eld description to
  303. the *.src #les.
  304.  
  305.  
  306. patch001       Scandir
  307.  
  308.  
  309.  
  310.          Fixes a problem with waisindex. Indexing a database the #rst time causes core dump
  311.          on some systems because the return value of scandir was not checked.
  312.  
  313. patch002       X11R6
  314.  
  315.  
  316.  
  317.          Makes the x client compile with X11R6.
  318.  
  319. patch003       waisserver
  320.  
  321.  
  322.  
  323.          Adds a forgotten f#ush which caused problems on some systems.
  324.  
  325. patch004       xwais
  326.  
  327.  
  328.  
  329.          Fixes an "one-off" bug in qcommands.c.
  330.  
  331. patch005       server security
  332.  
  333.  
  334.  
  335.          when the server accepted a connection from a client, the host_name and host_address
  336.          variables were left as empty strings (and so never matched the entries in theDATA_SEC
  337.          #le)! These need to be reset for each new client connection, which is what the patch
  338.          does.
  339.  
  340. patch006       long headlines
  341.  
  342.  
  343.  
  344.          Fixes a bug regarding long headlines.  This bug prevents long headlines from being
  345.          returned using waisq, waissearch, etc.
  346.  
  347.  
  348.  
  349.                                                            5
  350.  
  351.  
  352.  
  353.  
  354. patch007       line numbers for format #le parsing
  355.  
  356.  
  357.  
  358.          Due to incompatibilities of #ex, the fmt #le parser always complains about syntax
  359.          errors in line 0. This patch #xes this problem - you now will get the real line number,
  360.          where the error occurred.
  361.  
  362. patch008       unreadable #les
  363.  
  364.  
  365.  
  366.          Indexing with the '-r' option caused core dumps when encountering an unreadble
  367.          #le.  Also encountering already indexed #les was fatal.  The patch solves this.  A
  368.          message is printed in both cases.
  369.  
  370. patch009       date in headline
  371.  
  372.  
  373.  
  374.          The date format for the headline did not work.  This patch solves most of the known
  375.          problems with this.
  376.  
  377.  
  378.  
  379. 2.2      1.0
  380.  
  381. Jae W. Chang wrote in  his article in comp.infosystems.wais9 : What happens is that scandir
  382. is  searching  for  #les  of  the  form  field_<db>.<field>.   If  it  exists,  then  they  are
  383. removed since the user speci#ed a new database to be created and new #les have to be
  384. created by the same name.
  385. This is a bug. The result from scandir should've been checked. If the result is 0 - meaning
  386. no #les of the above form were found - the matches array is never allocated, BUT the code
  387. still dereferences matches as if it were allocated thus seg fault.
  388. Just looking brie#y at an Ultrix man page, freeWAIS-sf will bomb on this dec as well at the
  389. same spot, so it's not just isolated to a "linux" quirk.
  390. Here's my diff:
  391.  
  392.  
  393. diff  -c  -r1.22  field_index.c
  394. ***  1.22                1994/09/07  13:29:22
  395. ---  field_index.c              1994/10/05  14:10:26
  396. ***************
  397. ***  760,776  ****
  398.         strcpy(path,dir);
  399.         strncat(path,"/",MAX_FILENAME_LEN);
  400.  
  401.  
  402. !      scandir(dir,  &matches,  rmselector,  NULL);
  403. !      for(i=0;matches[i];i++)  -
  404. !          path[strlen(dir)+1]  =  '"0';
  405. !          strncat(path,matches[i]->d_name,MAX_FILENAME_LEN);
  406. !          s_free(matches[i]);
  407. !          waislog(WLOG_LOW,  WLOG_INFO,  "deleting  ""%s""",  path);
  408. !          if  (unlink(path))  -
  409. !              waislog(WLOG_HIGH,  WLOG_ERROR,  "unlink  failed");
  410. !          "
  411.         "
  412. -      s_free(matches);
  413.         return(i);
  414.     "
  415.  
  416. ________________________________________________9
  417.      news:UiYNLx600WB_RYIYUW@andrew.cmu.edu
  418.  
  419.  
  420.  
  421.                                                            6
  422.  
  423.  
  424.  
  425.  
  426. ---  760,777  ----
  427.         strcpy(path,dir);
  428.         strncat(path,"/",MAX_FILENAME_LEN);
  429.  
  430.  
  431. !      if  (  scandir(dir,  &matches,  rmselector,  NULL)  >  0  )  -
  432. !              for(i=0;matches[i];i++)  -
  433. !                  path[strlen(dir)+1]  =  '"0';
  434. !                  strncat(path,matches[i]->d_name,MAX_FILENAME_LEN);
  435. !                  s_free(matches[i]);
  436. !                  waislog(WLOG_LOW,  WLOG_INFO,  "deleting  ""%s""",  path);
  437. !                  if  (unlink(path))  -
  438. !                          waislog(WLOG_HIGH,  WLOG_ERROR,  "unlink  failed");
  439. !                  "
  440. !              "
  441. !              s_free(matches);
  442.         "
  443.         return(i);
  444.     "
  445.  
  446.  
  447.  
  448. 2.3      0.9.10
  449.  
  450.      o   Support for HPUX_SOURCES added.
  451.  
  452.      o   Compiler version is now reorted by udping
  453.  
  454.  
  455.  
  456. 2.4      0.9.8
  457.  
  458.      o   Patch from Alberto Accomazzi,  which causes stopwords to be taken either from
  459.          the internal list or from the speci#ed #le.   Option -stop  /dev/null will run
  460.          waisindex without any stopwords.
  461.  
  462.      o   Passes cc again.
  463.  
  464.  
  465.  
  466. 2.5      0.9.7
  467.  
  468.      o   Removed the ANSI_LIKE de#ne in Default.tmpl.in, which caused problems in com-
  469.          pilation on some platforms. We will postpone the ANSI stuff.
  470.  
  471.      o   Added tests for overlapping copies with bcopy() and memcpy(). If neither bcopy
  472.          nor memcpy can handle this, a slow but working function in cutil.c is used.
  473.  
  474.      o   Support for caching the synonyms in shared memory provided by Alberto Accomazzi
  475.          <alberto@cfa.harvard.edu> was added. Here is what he wrote about it:
  476.  
  477.          Caching is turned on by running waisserver with the #ag -cachesyn.
  478.  
  479.          For those of you who have fairly large synonym #les (> 10Kb) and are running the
  480.          software on a machine that supports shared memory (all the UNIX boxes that I have
  481.          worked with do now), enabling this feature will speed up the waisserver response
  482.          time by a signi#cant factor.
  483.  
  484.          For  those  of  you  who  do  not  have  shared  memory,  I  have  rewritten  the  memory
  485.          allocation part of synonym.c so that bigger memory chunks are allocated and used
  486.          rather than allocating memory for each word and synonym, so the code should be a
  487.          little faster for you too.
  488.  
  489.          You can #nd a brief explanation of how caching works in the header of synonym.c.
  490.  
  491.  
  492.  
  493.                                                            7
  494.  
  495.  
  496.  
  497.  
  498. 2.6      0.9.6
  499.  
  500.      o   Added the headline #x from Marko Niinimaki. Moved all de#nes to Defaults.tmpl.
  501.          Removed ir/irlex.h from dist.
  502.  
  503.      o   Clean the #uninitialized Memory Read# bug in waissserver.
  504.  
  505.  
  506.  
  507. 2.7      0.9.5
  508.  
  509.      o   Changed numbering for versions (to make jp happy)
  510.  
  511.      o   Changed con#gure code for -lsocket and -lnsl
  512.  
  513.      o   Fixed the TELL_USER code again to conform to ANSI
  514.  
  515.      o   Added install.lib target for the Make#les. (Only with Imake)
  516.  
  517.      o   Some additions to documentation
  518.  
  519.      o   Files on waisindex command line may now have extension ".gz".
  520.  
  521.  
  522.  
  523. 2.8      0.94
  524.  
  525.      o   Some little #xes to make purify happy.
  526.  
  527.      o   Fixed the keyword code.
  528.  
  529.      o   config.h is not in the distribution any more, which was a bug.
  530.  
  531.      o   The result of getenv("USER") will not break waisserver any more if NULL is returned.
  532.  
  533.  
  534.  
  535. 2.9      0.93
  536.  
  537. In this version code was added to send me a UDP packet each time the INFO database gets
  538. re-indexed.  This should not disturb the normal operation of the server, even if the sending
  539. fails.   I included that to track use of the software.   You can switch this off by de#ning
  540. DO_NOT_TELL_ABOUT_ME in Defaults.tmpl
  541.  
  542.  
  543.  
  544. 2.10       Beta 05
  545.  
  546.      o   A bug in calculation the #Total word count# has been #xed
  547.  
  548.      o   Indexing and retrieval of #les compressed by the GNU gzip is now supported. If you
  549.          want to index a #le TEST.gz, call waisindex with the extension stripped:
  550.  
  551.  
  552.          waisindex  -t  text  -d  test  TEST
  553.  
  554.  
  555.          This worked formerly only with the standard compress command and the #.Z#
  556.          extension.
  557.  
  558.  
  559.  
  560.                                                            8
  561.  
  562.  
  563.  
  564.  
  565. 3      Indexing
  566.  
  567.  
  568. If you want to index a collection of #les containing one or more documents using FreeWAIS-
  569. sf #rst look at the supported document type formats.  You may look at the  manual page
  570. of waisindex10  or type waisindex without arguments for information about supported
  571. document types.
  572. If your document object is one of the supported types, run the waisindex command with the
  573. t -t argument:
  574. waisindex  -d  index_file_root_name  -t  doc_type  object  object  : : :
  575. where:
  576.  
  577. -d   denotes the rootname to be used for the collection of index #les and will include suf#xes
  578.          created by the waisindex program
  579.  
  580. -t  denotes the document types supported by the waisindex command
  581.  
  582. object     is the #le name of a target object to be indexed by the command.
  583.  
  584. Both the -d and object speci#cations support full pathnames and default to the current
  585. directory if no pathnames are provided.
  586. If you have a document in an unsupported format or would like to split individual documents
  587. into #elds, you must generate two document format #les.
  588. First you should decide which #elds you will use, and what their name should be. Usually
  589. it is a good idea to provide further information about what the #elds contain or mean.  The
  590. #eld de#nition #le <database>.fde contains this information. Here is an example:
  591.  
  592.  
  593. py:  publication  year
  594. au:  author
  595. ti:  title
  596. jt:  journal  title
  597. ck:  citation  key
  598.  
  599.  
  600. Waisindex will put the names of the generated #elds in the server description (<database>.-
  601. src) it will produce if a #eld de#nition #le is encountered.
  602. Now comes the hard part.  You now have to generate a format #le <database>.fmt for
  603. your new database. Look at  the examples11  on our ftp server if the following is too obscure.
  604. The abstract syntax for the speci#cation #les follows:
  605. ________________________________________________10
  606.   11 http://ls6-www.informatik.uni-dortmund.de/htbin/man?waisindex()
  607.      ftp://ls6-www.informatik.uni-dortmund.de/pub/wais
  608.  
  609.  
  610.  
  611.                                                            9
  612.  
  613.  
  614.  
  615.  
  616. 3.1      Document Speci#cation Syntax
  617.  
  618.   format              !      <record-end> regexp speclist
  619.   speclist            !      spec | spec speclist
  620.                                <#eld>         REGEXP regexp
  621.                                               #eld-list
  622.   spec                !                       options
  623.                                               index-specs
  624.                                <end>          regexp
  625.   options             !      2 | option options
  626.                                NUMERIC regexp INT
  627.   options             !        HEADLINE regexp INT
  628.                                DATE REGEXP REGEXP date date date regexp
  629.   index-specs         !      2 | index-spec index-specs
  630.   index-spec          !      index-type dicts
  631.   index-type          !      TEXT | SOUNDEX | PHONIX
  632.   dicts               !      GLOBAL | LOCAL | BOTH
  633.   date                !      DAY | MONTH month-spec | YEAR
  634.   month-spec          !      2 | STRING
  635.   #eld-list           !      2 | WORD #eld-list
  636. Now what do the index types LOCAL, GLOBAL and BOTH mean?
  637. Note that FreeWAIS-sf generates dictionaries and inverted #les for each #eld. If there were
  638. no global or default #eld for general text search one would always have to specify a #eld
  639. in your queries.  To avoid this inconvenience waisindex generates a default #eld which is
  640. used for searching if there is no #elds speci#ed. This #eld is called global, since it usually
  641. contains the information of some of the other #elds which the administrator assumes to be
  642. useful for unexperienced users.
  643. The contents of the index #eld are de#ned by using the keywords LOCAL, GLOBAL and
  644. BOTH in the #eld de#nitions.
  645.  
  646.  
  647. LOCAL         Words in this #eld are not inserted in the global database and are only retrievable
  648.          by #eld query.  Numeric and date #elds are particularly well suited to the use of this
  649.          option.
  650.  
  651. GLOBAL          Words in this #eld are only inserted in the global database.  This is analogous
  652.          to the default free-text search of other versions of freeWAIS but allows all or part of
  653.          the document to be indexed for general search.  Do not specify a #eld name in this
  654.          case since the #eld will be empty!
  655.  
  656. BOTH       Words in this #eld are inserted in both the current #eld database and the global
  657.          database.
  658.  
  659.  
  660. Regular expressions are used to #nd, match, and parse strings encountered in a document.
  661. These regular expressions are used within the .fmt #le to delimit #eld entries. For those not
  662. familiar with regular expressions, some conventions are provided in the following section:
  663.  
  664.  
  665.  
  666.                                                           10
  667.  
  668.  
  669.  
  670.  
  671. 3.1.1     REGULAR EXPRESSION SYNTAX
  672.  
  673. __Operator____________Meaning___________________________________
  674.   x                   the character "x"
  675.   "x"                 an "x", even if x is an operator
  676.   "x                  an "x", even if x is an operator
  677.   [xy]                the character x or y
  678.   [x-z]               the characters x, y or z
  679.   [^x]                any character but x
  680.   .                   any character but newline
  681.   ^x                  an x at the beginning of a line
  682.   x$                  an x at the end of a line
  683.   x?                  an optional x
  684.   x*                  0,1,2, ... instances of x
  685.   x+                  1,2,3, ... instances of x
  686.   x_y                 an x or a y
  687.   (x)                 an x
  688.   x-m,n"              m through n occurrences of x
  689. Note that the scanner requires an aditional level of escaping because the '/' indicates the
  690. end of the regular expression. So '/' must be escaped by a backslash: '"/'. If you need
  691. a backslash in you regexp, it must me escaped to: '""'. Since formfeed and other control
  692. characters are often needed '"x' for x from 'A' to 'Z' is mapped to '^x' (ctrl x, ). This
  693. means 'A' is subtracted from the original character.
  694. For example "A=^A(ctrnl  A), "B  =  ^B, : : :"J  =  "n (newline).  This is somewhat
  695. ad-hoc,  but  was  easy  to  implement  and  allows  users  of  limited  editors  to  enter  control
  696. characters in the format #le.
  697. Here is a #rst small example of a structured document collection to be indexed.
  698.  
  699.  
  700. 3.1.2     Small example
  701.  
  702. Suppost you have #les containing many documents, from which you will only index thier
  703. titles contained between <TI:> tags:
  704.  
  705.  
  706. <TI:>  Information  Retrieval  <:TI>
  707. [...]
  708. <TI:>  Database  Systems  <:TI>
  709.  
  710.  
  711. You format #le (.fmt) should look like this:
  712.  
  713.  
  714. <field>  /<TI:>/
  715. ti  TEXT  LOCAL
  716. <end>  /<:TI>/
  717.  
  718.  
  719. Now  that  you  have  you  format  #le  <database>.fmt,  call  waisindex  with  option  '-t
  720. fields'. Because the .fmt #le already begins with the index #le root name it is used by
  721. the FreeWAIS-sf waisindex program. The -t #elds option must have a .fmt #le present.
  722. Now its time to give a more complicated example:
  723.  
  724.  
  725. 3.1.3     DOCUMENT SPEC EXAMPLE
  726.  
  727. For an example #le like this
  728.  
  729.  
  730. CK:  Mostert/etal:89
  731. AU:  Mostert,  D.N.J.;  Eloff,  J.H.P.;  von  Solms,  S.H.
  732. TI:  A  Methodology  for  Measuring  User  Satisfaction.
  733. JT:  Information  processing  &  management.
  734.  
  735.  
  736.  
  737.                                                           11
  738.  
  739.  
  740.  
  741.  
  742. ED:  JAN-01-1994
  743. VO:  25
  744. PY:  1989
  745. NO:  5
  746. PP:  545
  747. ^L
  748. CK:  Qiu:90
  749. AU:  Qiu,  Liwen
  750. TI:  An  Empirical  Examination  of  the  Existing  Models  for
  751.         Bradford's  Law.
  752. JT:  Information  processing  &  management.
  753. ED:  JAN-01-1994
  754. VO:  26
  755. PY:  1990
  756. NO:  5
  757. PP:  655
  758. ^L
  759.  
  760.  
  761. the following format #le could be used:
  762.  
  763.  
  764.  
  765.                                                           12
  766.  
  767.  
  768.  
  769.  
  770.   <record-end>  /^L/                                 records are separated by form feeds (Cntrl-L not
  771.                                                      '^L' ! "L would be equivalent)
  772.   <layout>
  773.     <headline>                                       line  which  starts  with  'TI:  '  and  ends  with
  774.          /^TI:  /  /^[A-Z][A-Z]:/                    /^[A-Z][A-Z]:/ #rst 50 chars after 'TI:  '
  775.          50  /TI:  /                                 are copied to the chars 1 to 50 of the headline.
  776.  
  777.     <headline>                                       line  which  starts  with  'AU:  '  and  ends  with
  778.          /^AU:  /  /^[A-Z][A-Z]:/                    /^[A-Z][A-Z]:/ #rst 50 chars after 'AU:  '
  779.          50  /AU:  /                                 are copied to chars 51 to 100 of the headline.
  780.  
  781.     <date>  /^ED:  /                                 line   starts   with   /^ED:  /  /%s-%d-%d/   is
  782.          /%s-%d-%d/                                  sscanf_argument Month is a string (nummber by
  783.          month  string  day  year
  784.          /^ED:  [^  ]/                               default if you don't type 'string') after month
  785.                                                      is day, then year.  /^ED:  [^  ]/ is the begin of
  786.                                                      index position. <end>
  787.                                                      end of layout.
  788.     <field>  /^PY:  /                                It  is  a  numeric  #eld  of  length  4,  begin  at  #rst
  789.     py  <numeric>                                    number of PY, e.g if the number is 1990 then the
  790.     /^PY:  [^  ]/  4  TEXT  LOCAL
  791.     <end>  /^[A-Z][A-Z]:/                            regexp /^PY:  [^  ]/ means ^ here is the begin
  792.                                                      of the number (begin of line by default) indexed
  793.                                                      with type TEXT in the local dictionary only and
  794.                                                      ends  with  the  next  tag.   Note  that  matching  for
  795.                                                      the end tag is restricted to posintions after the skip
  796.                                                      regexp /^PY:  [^  ]/.  This enshures, that the
  797.                                                      PY: is not recognized as end tag, causing the #eld
  798.                                                      to be empty.
  799.     <field>  /^AU:  /                                #eld 'au' is indexed with types TEXT and SO-
  800.     au  SOUNDEX  LOCAL  TEXT  LOCAL                  UNDEX in the local dictionary.
  801.     <end>  /^[A-Z][A-Z]:/
  802.     <field>  /^CK:  /                                #eld 'ck' is indexed with type text in the local
  803.     ck  TEXT  BOTH                                   and the global dict.
  804.     <end>  /^[A-Z][A-Z]:/
  805.     <field>  /^TI:  /                                #eld 'ti' is indexed with type text in the local
  806.     ti  stemming  TEXT  BOTH                         and the global dict.  'stemming' indicate that
  807.     <end>  /^[A-Z][A-Z]:/                            the stemmer is to call for this #eld (no stemming
  808.  
  809.                                                      by default).
  810.     <field>  /^AU:  /                                #eld 'au' is indexed with type text in the local
  811.     au  TEXT  BOTH                                   and the global dict.
  812.     <end>  /^[A-Z][A-Z]:/
  813.     <field>  /^JT:  /  /^JT:  [^  ]/                 #elds 'jt' and 'jt' are indexed with type text
  814.     ti  jt  TEXT  BOTH                               in the local and the global dict. The begin is at the
  815.     <end>  /^[A-Z][A-Z]:/                            #rst  character  after  this  regexp  /^JT:  [^  ]/
  816.  
  817.                                                      (optional, begin of line by default), e.g JT: Infor-
  818.                                                      mation processing & management.  ^ here is the
  819.                                                      beginning to index.
  820.     <field>  /^AU:  /                                line  which  begins  with  the  regexp  /^AU:  /
  821.     TEXT  GLOBAL                                     should be indexed only in global dictionary.
  822.     <end>  /^[A-Z][A-Z]:/
  823.  
  824.  
  825. 3.2      Note
  826.  
  827.      o   If a separator is a empty line the regexp for this is "J.
  828.  
  829.      o   The length of a headline is 100 characters. If you want to change the length of headline
  830.          update MAX_HEADER_LEN and MAX_HEADLINE_LEN in Defaults.tmpl.
  831.  
  832.      o   Of course, you can use other options too, e.g, waisindex  -d  index_filename
  833.          -t  fields  -r  filename
  834.  
  835.  
  836.  
  837.                                                           13
  838.  
  839.  
  840.  
  841.  
  842.      o   If you want to create only one #eld, but the old #elds should not be deleted you can
  843.          use the option -nfields.  In the document speci#cation you must add new #elds
  844.          which you want to index.
  845.  
  846.          Example
  847.  
  848.  
  849.            ...
  850.            <field>  /^AU:  /
  851.            names  TEXT  LOCAL  _  BOTH
  852.            <end>  /^[A-Z][A-Z]:/
  853.  
  854.  
  855.          Only #eld 'names' would be created.
  856.  
  857.      o   If you want to specify the headline corresponding to the format de#ned, e.g.  (irlist,
  858.          mail_or_rmail, etc.), and don't want to use the standard #eld format for headlines you
  859.          must call this:
  860.          waisindex  -d  test  -t  fields  -t  mail_or_rmail  TEST.
  861.  
  862.          The -t  mail_or_rmail option must be after the -t      fields option!
  863.  
  864.  
  865. When you have generated your format #le, run waisindex with the '-t  fields' #ag
  866. and see if your speci#cation works.  If the parser encounters a syntax error, there is very
  867. limited support for debugging the offending part of your speci#cation.
  868. Best way to circumvent this is to start with a very simple de#nition and try waisindex every
  869. now and then.
  870.  
  871.  
  872.  
  873. 4      Queries
  874.  
  875.  
  876. 4.1      How can you make a search query ?
  877.  
  878. 4.1.1     QUERY SYNTAX
  879.  
  880.   query                !      expression
  881.   expression           !      term
  882.                               expression OR term
  883.                               expression term                           OR may be ommited
  884.   term                 !      factor
  885.                               term AND factor
  886.                               term NOT factor                           NOT really means AND NOT
  887.   factor               !      word
  888.                               ( expression )
  889.                               #eld = ( s_expression )
  890.                               #eld = word
  891.                               #eld = phonix_soundex word                phonix or soundex search
  892.                               #eld = = word                             for numeric #elds
  893.                               #eld < word
  894.                               #eld > word
  895.   same as above, but no #eld spec is allowed, since one is given already
  896.   s_expression         !      s_term
  897.                               s_expression OR s_term
  898.                               s_expression s_term
  899.   s_term               !      s_factor
  900.                               s_term AND s_factor
  901.                               s_term NOT s_factor
  902.   s_factor             !      WORD
  903.                               ( s_expression )
  904.  
  905.  
  906.  
  907.                                                           14
  908.  
  909.  
  910.  
  911.  
  912. 4.1.2     QUERY EXAMPLES
  913.  
  914.   information  retrieval                                         free text queries
  915.   information  OR  retrieval                                     same as above
  916.   ti=information  retrieval                                      information must be in the title
  917.   ti=(information  retrieval)                                    one of them in title
  918.   ti=(information  OR  retrieval)                                one of them in title
  919.   ti=(information  AND  retrieval)                               both of them in title
  920.   ti=(information  NOT  retrieval)                               #information# in title and #retrieval# not
  921.                                                                  in title
  922.   py==1990                                                       numeric equal
  923.   py<1990
  924.   py>1990
  925.   au=(soundex  salatan)                                          soundex search matches eg. #Salton#
  926.   ti=('information  retrieval')                                  literal search
  927.   ti=(information  system*)                                      partial search
  928. The use of capital letters for the Boolean operators is not required but is provided in this
  929. example for clarity. All search matching is case-insensitive.
  930.  
  931.  
  932.  
  933. 5      Weighting
  934.  
  935.  
  936. Here is an excerpt of the corresponding smart routine:
  937. The documents would be presented by term vectors of the form
  938.  
  939.  
  940.                                      D = (t0 ; wd0 ; t1 ; wd 1; :::; tt; wdt )
  941.  
  942.  
  943. where each tk  identi#es a content term assigned to some sample document and wdk  repres-
  944. ents the weight of term tk  in Document D (or query Q). Thus, a typical query Q might be
  945. formulated as
  946.                                      Q = (q0 ; wq0 ; q1 ; wq 1; :::; qt; wqt )
  947.  
  948. where qk  once again reprents a term assigned to query Q. The weights could be allowed to
  949. vary continuosly between 0 and 14, the higher weight assignments near 1 being used for the
  950. most important terms, whereas lower weights near 0 would characterize the less important
  951. terms. Given the vector representation, a query-document similarity value may be obtained
  952. by comparing the corresponding vectors, using for example the conventional vector product
  953. formula
  954.                            similarity(Q; D) = sum(wqk  * wdk ); k = 1tot:
  955.  
  956. Three factors important for term_weighting:
  957.  
  958.     1.   term frequency in individual document (recall)
  959.  
  960.     2.   inverse document frequency (precision)
  961.  
  962.     3.   document length (vector length)
  963.  
  964. Term frequency component used:  new _wgt  =  0:5 + 0:5 * tf =max_tf  augmented nor-
  965. malized term frequency (tf  factor normalized by maximum tf  in the vector, and further
  966. normalized to lie between 0:5 and 1:0).
  967. Collection frequency component used: 1:0 no change in weight; use original term frequency
  968. component.                    p   __________________P
  969. Normalization component used:         new _wgt2      = vector _length.
  970. Thus, document term weight is: wdk  = new _wgt=vector _length
  971. By query term weighting, it is assumed that tf is equal to 1. So that wqk  = 1.
  972.  
  973.  
  974.  
  975.                                                           15
  976.  
  977.  
  978.  
  979.  
  980. 5.1      Document term weighting by standard Boolean formulations
  981.  
  982. Given queries "AorB", "AandB", and "AnotB" (A and-not B), a document X with weights
  983. dA (X ) and dB  (X ) for terms A and B. The retrieval values are:
  984.  
  985.      o   dA (X ) + dB  (X ) for query (AorB)
  986.  
  987.      o   min(dA (X; dB  (X ) for query (AandB)
  988.  
  989.      o   min(A; 1 - dB  (X )) for query (AnotB(Aand - notB))
  990.  
  991. Note: If you use these new formula the inverted #les (.inv) will have a new structure.
  992.  
  993.  
  994. 5.1.1     Term weighting in wais
  995.  
  996.  
  997.  
  998.                wdk  = ((log(tf ) + 10) * idf )=number _of _terms_in_a_document
  999.  
  1000.  
  1001.      o   tf = term frequency. Initially is tf = 5.
  1002.  
  1003.      o   idf = 1/term_frequency_in_the_collection
  1004.  
  1005.  
  1006. 5.1.2     Disadvantages
  1007.  
  1008.      o   For example a database consists of 10 documents. A term which occurs 10 times in a
  1009.          document has the idf = 1/10. The same term which occurs in 10 documents has also
  1010.          idf = 1/10. One can say in both cases the term has the same relevance. This may not
  1011.          be correct.
  1012.  
  1013.      o   The normalization factor is not the weight of each term in the document but number
  1014.          of terms in a document.
  1015.  
  1016.  
  1017.  
  1018. 6      Installation
  1019.  
  1020.  
  1021. Just run the configure script in the Distribution. If you have a working imake on you
  1022. system, enter xmkmf  -a now.
  1023. Then type:
  1024.  
  1025. make
  1026.          to build the system and run the tests
  1027.  
  1028. make  install
  1029.          to install binaries and scripts
  1030.  
  1031. make  install.man
  1032.          to install the manual pages only with imake.  The default Make#les install them with
  1033.          make  install
  1034.  
  1035. make  install.lib
  1036.          to install the libraries only with imake.
  1037.  
  1038. make  clean
  1039.          removes object #les, libraries, backups, : : :
  1040.  
  1041. make  veryclean
  1042.          removes #les generated by #ex, bison, dvips, latex
  1043.  
  1044.  
  1045.  
  1046.                                                           16
  1047.  
  1048.  
  1049.  
  1050.  
  1051. 7      FreeWAIS-sf and WWW
  1052.  
  1053.  
  1054. Linking was tested with:
  1055.  
  1056.  
  1057.      o   NCSA Mosaic 2.4
  1058.  
  1059.      o   Tuebingen Univ Mosaic 2.4.2
  1060.  
  1061.      o   CERN httpd 3.0
  1062.  
  1063.  
  1064.  
  1065. 7.1      freeWAIS-sf and CERN httpd
  1066.  
  1067. Direct WAIS access for CERN httpd 3.0 is easy to provide with freeWAIS-sf 1.1. The only
  1068. thing you need to do is rename the WAIS libraries in CERN httpd Make#le's.
  1069. If you're a lucky guy and your system supports imake, you need to:
  1070.  
  1071.  
  1072.      o   Retrieve  Rainer Klute's Imake extension to CERN httpd 3.012
  1073.  
  1074.      o   Replace WWW.cf in the top-level directory with this code in Appendix A
  1075.  
  1076.      o   Update the location of your freeWAIS-sf code in WWW.cf (variable WAISDIR)
  1077.  
  1078.  
  1079. If your system doesn't support imake, you need to update manually the WAIS libraries in
  1080. the Make#le pertaining to your architecture and the top-level Make#le.  And think about
  1081. how easy life would be if only you had imake.
  1082. Enjoy
  1083. Jean-Philippe (syj@ecmwf.co.uk)
  1084. There is also a CGI Gateway especially suited for FreeWAIS-sf  which enables usage of
  1085. Mosaic forms for searching.   See the   SFgate Documentation and Demos13  on our http
  1086. server.
  1087.  
  1088.  
  1089.  
  1090. 8      FreeWAIS-sf and gopher 2.1.1 (by Steve Hsieh)
  1091.  
  1092.  
  1093. Files used:
  1094.  
  1095. gopher2_1_1.tar.Z
  1096. freeWAIS-sf-1.0.tgz
  1097.  
  1098.  
  1099. Changes made to the distribution:
  1100.  
  1101.  
  1102. Apply patches 1-6,8-9 (not 7) to the original freewais-sf-1.0 source tree.  You may or may
  1103. not want to apply all of them.   Patches available in the pub/wais directory on ftp://ls6-
  1104. www.informatik.uni-dortumund.de
  1105.  
  1106.  
  1107. SPECIAL NOTES:
  1108.  
  1109. Linux:     you must at least apply patch001
  1110.  
  1111. Solaris:     do not apply patch005
  1112. ________________________________________________12
  1113.   13 ftp://ftp.germany.eu.net/pub/infosystems/www/cern/WWW-Imake.tar.gz
  1114.      http://ls6-www.informatik.uni-dortmund.de/SFgate/SFgate
  1115.  
  1116.  
  1117.  
  1118.                                                           17
  1119.  
  1120.  
  1121.  
  1122.  
  1123. How to    in gopher2_1_1/gopherd/Makefile:
  1124. replaced original SFWAISOBJ with:
  1125.  
  1126.  
  1127. (linux):
  1128.  
  1129.  
  1130.  
  1131.          SFWAISOBJ              =  ../regexp/libregexp.a  ../ir/libinv.a  ../ir/libclient.a  "
  1132.                                             ../ir/libwais.a  ../ir/liblocal.a  ../ir/libsig.a  "
  1133.                                             ../ui/source.o  ../lib/libftw.a
  1134.  
  1135.  
  1136.  
  1137. (solaris & SunOS):
  1138.  
  1139.  
  1140.  
  1141.          SFWAISOBJ              =  ../ir/libinv.a  ../ir/libclient.a  ../ir/libwais.a  "
  1142.                                             ../ir/liblocal.a  ../ir/libsig.a  ../ui/source.o  "
  1143.                                             ../regexp/libregexp.a  ../lib/libftw.a
  1144.  
  1145.  
  1146. in gopher2_1_1/gopherd/waisgopher.c: change
  1147.  
  1148.                 MIN(
  1149.  
  1150. to
  1151.  
  1152.                 MINIMUM(
  1153.  
  1154. run con#gure in freeWAIS-sf-1.0
  1155. For the following con#gure questions, 'required' means that I had to use that value to get
  1156. gopher to work with freewais-sf. 'doesn't matter' means that the decision is up to you...
  1157.  
  1158.  
  1159. Do  you  want  to  use  your  systems  regexp.h  (no)?    no  <--  required
  1160. Will  you  have  HEADLINE  files  greater  than  16  MB  (no)?      no  <--  doesn't  matter
  1161. Use  your  systems  ctype  (no)?        yes  <--  required
  1162. Do  you  want  to  compile  with  -DLOCAL_SEARCH  (yes)?              yes  <--  required
  1163. Do  you  want  to  use  the  modified  URL  handling  (no)?            no  <--  doesn't  matter
  1164. Where  should  the  installation  go  (/usr/local/wais)?  (specify  your  own  path)
  1165. Do  you  want  to  use  shm  cache  (no)?            no  <--  doesn't  matter
  1166. Disable  the  UDP  packet  sending  (no)?        no  <--  doesn't  matter
  1167.  
  1168.  
  1169. make freewais-sf-1.0 : : :
  1170. create symbolic links to in gopher2_1_1 to the appropriate freewais-sf directories...
  1171. In gopher2_1_1:
  1172.  
  1173. ln  -s  ../freeWAIS-sf-1.0/ir
  1174. ln  -s  ../freeWAIS-sf-1.0/ui
  1175. ln  -s  ../freeWAIS-sf-1.0/lib
  1176. ln  -s  ../freeWAIS-sf-1.0/regexp
  1177.  
  1178. Edit gopher2_1_1/Makefile.conf  gopher2_1_1/conf.h as necessary for your
  1179. system and site.
  1180. Make sure to uncomment -DFREEWAIS_SF in Makefile.conf !
  1181. make gopher...
  1182. In the case of an index type not recognized error, test an index on an database that has been
  1183. reindexed using the newly compiled waisindex in freeWAIS-sf-1.0/ir (as opposed
  1184. to gopherindex) just to make sure that there really still is a problem...
  1185.  
  1186.  
  1187.  
  1188.                                                           18
  1189.  
  1190.  
  1191.  
  1192.  
  1193. 9      FreeWAIS-sf and gopher 2.016 (by Steve Hsieh)
  1194.  
  1195.  
  1196. Here  are  the  changes  that  I  made  to  get  freewais1.0  and  gopher2.016  running  happily
  1197. together the way we wanted:
  1198.  
  1199.  
  1200.      o   The important freewais-sf con#gure options (questions below with no value can take
  1201.          on a value of your choice):
  1202.  
  1203.  
  1204.              use  your  systems  regexph.h?  (no)          <--  necessary  for  gopher  to  work
  1205.              headlines  >  16MB?  (yes)
  1206.              use  systems  ctype?  (yes)                      <--  necessary  for  gopher  to  work
  1207.              compile  with  -DLOCAL_SEARCH?  (yes)       <--  necessary  for  gopher  to  do  local  searches
  1208.              modify  URL?
  1209.              install  where?
  1210.              use  shm  cache?
  1211.              disable  UDP  packet  sending?
  1212.  
  1213.  
  1214.  
  1215.      o   make freewais-sf
  1216.  
  1217.      o   cd to freeWAIS-sf-dir/ir and type, ar  cq  sfextra.a  query_y.o  field_y.o
  1218.          query_l.o. Some systems need a call of ranlib: ranlib  sfextra.a.
  1219.  
  1220.      o   cd to freeWAIS-sf-dir/bin and type,
  1221.  
  1222.  
  1223.          ln  -s  ../regexp/libregexp.a  regexp.a
  1224.          ln  -s  ../lib/libftw.a  libftw.a
  1225.  
  1226.  
  1227.      o   Create ui, ir, and bin symbolic links in gopher source directory to corresponding
  1228.          ui, ir, and bin dirs in freewais-sf-dir as instructed in gopherd installation docs
  1229.          regarding wais.
  1230.  
  1231.      o   Apply  this patch14  to the gopher-dir/gopherd directory.  Instructions on how to do
  1232.          this are included with the #le.
  1233.  
  1234.      o   make gopher
  1235.  
  1236.  
  1237. That's all there is to it...
  1238.  
  1239.  
  1240.  
  1241. Contents of patch #le
  1242.  
  1243. Below, I have summarized (in words) the changes that the patch above makes to #les in
  1244. gopher-dir /gopherd.  Please use the patch to make the actual changes, as there may be
  1245. typos or other kinds of errors below...
  1246.  
  1247.      o   in gopher-dir/gopherd/waisgopher.c Between the two lines
  1248.  
  1249.  
  1250.                 readSearchResponseAPDU(&query_response,  response_message  +
  1251.          HEADER_LENGTH);
  1252.  
  1253.                 display_search_response(query_response,  server_name,  service,  database,
  1254.          SourceName,  sockfd,  view,  isgplus);
  1255.  
  1256.  
  1257.          added:
  1258.  
  1259.  
  1260.                 LOGGopher(sockfd,  "search  %s  for  %s",  database,  keywords);
  1261.  
  1262.  
  1263.          Also replaced:
  1264. ________________________________________________14
  1265.      ftp://ls6-www.informatik.uni-dortmund.de/pub/wais/gopher2.016.patch.gz
  1266.  
  1267.  
  1268.  
  1269.                                                           19
  1270.  
  1271.  
  1272.  
  1273.  
  1274.                              MIN
  1275.  
  1276.  
  1277.     with
  1278.  
  1279.  
  1280.                              MINIMUM
  1281.  
  1282.  
  1283. o   in gopher-dir/gopherd/Makefile:  Commented out existing WAISOBJ and re-
  1284.     placed with:
  1285.  
  1286.  
  1287.         WAISOBJ  =  ../ir/libinv.a  ../ir/libclient.a  "
  1288.                         ../ir/libwais.a  $(WAISGATEOBJ)  "
  1289.                         ../bin/regexp.a  ../ir/libinv.a  "
  1290.                         ../ir/sfextra.a  ../bin/regexp.a  ../bin/libftw.a
  1291.  
  1292.  
  1293. o   For Path=7/indexdir/index to work in .links #les, we could do this by
  1294.     changing the openDatabase call Waisindex.c from
  1295.  
  1296.  
  1297.            db  =  openDatabase(new"_db"_name,  false,  true);
  1298.  
  1299.  
  1300.            db  =  openDatabase(new"_db"_name,  false,  true,  false);
  1301.  
  1302.  
  1303.     But booleans don't work when we do this...so instead, we modify the following #les:
  1304.  
  1305. o   In gopher-dir/gopherd/gopherd.c:
  1306.  
  1307.     Replace
  1308.  
  1309.  
  1310.            case  '7':
  1311.                    /***  It's  an  index  capability  ***/
  1312.                    result  =  GDCCanSearch(Config,  CurrentPeerName,  CurrentPeerIP,
  1313.                                                       NUMgopherds);
  1314.  
  1315.                    if  (result  ==  SITE_NOACCESS)  -
  1316.                            Abortoutput(sockfd,  GDCgetBummerMsg(Config));
  1317.                            LOGGopher(sockfd,  "Denied  access  for  %s",  Selstr+1);
  1318.                            break;
  1319.                    "  else  if  (result  ==  SITE_TOOBUSY)  -
  1320.                            Abortoutput(sockfd,  "Sorry,  too  busy  now...");
  1321.                            break;
  1322.                    "
  1323.  
  1324.                    Do_IndexTrans(sockfd,  Selstr+1,  cmd,  TRUE);
  1325.  
  1326.                    break;
  1327.  
  1328.  
  1329.     with:
  1330.  
  1331.  
  1332.            case  '7':
  1333.            -
  1334.                    int  Index_type=0;
  1335.  
  1336.                    /***  It's  an  index  capability  ***/
  1337.                    result  =  GDCCanSearch(Config,  CurrentPeerName,  CurrentPeerIP,
  1338.                                                       NUMgopherds);
  1339.  
  1340.                    if  (result  ==  SITE_NOACCESS)  -
  1341.                            Abortoutput(sockfd,  GDCgetBummerMsg(Config));
  1342.                            LOGGopher(sockfd,  "Denied  access  for  %s",  Selstr+1);
  1343.                            break;
  1344.                    "  else  if  (result  ==  SITE_TOOBUSY)  -
  1345.                            Abortoutput(sockfd,  "Sorry,  too  busy  now...");
  1346.                            break;
  1347.                    "
  1348.  
  1349.  
  1350.  
  1351.                                                      20
  1352.  
  1353.  
  1354.  
  1355.  
  1356.                    /*  see  if  index  is  type  1,  which  is  a  wais  index  */
  1357.                    Index_type  =  Find_index_type(Selstr+1);
  1358.  
  1359.                    if  (Index_type  ==  1)
  1360.                        -
  1361.                            char  waisfname[512];   /***  Ick  this  is  gross  ***/
  1362.  
  1363.                            strcpy(waisfname,  Selstr+1);
  1364.                            if  (strlen(waisfname)  <=  4  __
  1365.                                   strncmp(&waisfname[strlen(waisfname)-4],".src",4)  )
  1366.                                    strcat(waisfname,  ".src");
  1367.                            SearchRemoteWAIS(sockfd,  waisfname,  cmd,  view);
  1368.                         "
  1369.                    else
  1370.                        -
  1371.                           Do_IndexTrans(sockfd,  Selstr+1,  cmd,  TRUE);
  1372.                        "
  1373.  
  1374.                    break;
  1375.            "
  1376.  
  1377.  
  1378. o   Then for mindex searches to work,  edit gopher-dir/gopherd/mindexd.c and
  1379.     comment out:
  1380.  
  1381.  
  1382.                    if  (strcmp(slaves[i].host,  "localhost")  ==  0  __
  1383.                           strcasecmp(slaves[i].host,  Zehostname)   ==  0)  -
  1384.                            CMDsetSelstr(cmd,  GSgetPath(gs));
  1385.                            CMDsetSearch(cmd,  queryline);
  1386.                            CMDsetGplus(cmd,  FALSE);
  1387.  
  1388.                            Do_IndexTrans(sockfd,  slaves[i].pathname+1,  cmd,  FALSE);
  1389.                    "  else  -
  1390.  
  1391.  
  1392.     I also commented out the associated closing } with that paragraph a little over 30
  1393.     lines down.
  1394.  
  1395. o   In function do_mindexd(sockfd,  config_filename,  search,  isgplus,
  1396.     view): Between the two lines
  1397.  
  1398.  
  1399.            HandleQuery(sockfd,  search);
  1400.            close(sockfd);
  1401.  
  1402.  
  1403.     added:
  1404.  
  1405.  
  1406.            LOGGopher(sockfd,  "mindex  search  using  %s.mindex  for  %s",
  1407.     config_filename,
  1408.     search);
  1409.  
  1410.  
  1411.     There is also a bug in gopher-dir/gopherd/waisgopher.c As it stands, if you
  1412.     do a search using Path=waissrc:..., and search is empty, server does not return
  1413.     a '.', leaving old clients hanging
  1414.  
  1415.     To #x, found the line (near or on line 557)
  1416.  
  1417.  
  1418.            writestring(sockfd,  "."r"n");
  1419.  
  1420.  
  1421.     and moved it to after the second to last curly brace of that procedure call.  In other
  1422.     words, at the end of this procedure:
  1423.  
  1424.  
  1425.  
  1426.                                                      21
  1427.  
  1428.  
  1429.  
  1430.  
  1431.                             Mydisplay_text_record_completely(  info->Text[k++],  false,  sockfd);
  1432.                                 "
  1433.                         "
  1434.                 "
  1435.          "
  1436.  
  1437.  
  1438.          became
  1439.  
  1440.  
  1441.                             Mydisplay_text_record_completely(  info->Text[k++],  false,  sockfd);
  1442.                                 "
  1443.                         "
  1444.                 "
  1445.                 writestring(sockfd,  "."r"n");
  1446.          "
  1447.  
  1448.  
  1449.      o   Some additional enhancements to gopher-dir/gopherd/mindexd.c were made
  1450.          as well to make it more robust and handle connections that time out.  They are not
  1451.          documented here; see the patch for details.
  1452.  
  1453.  
  1454.  
  1455. 10        Special needs
  1456.  
  1457.  
  1458. 10.1       Increasing the index block size (by Steve Hsieh)
  1459.  
  1460. In order to increase the index block size, so that words that appear many many times are
  1461. indexed:
  1462.  
  1463.  
  1464.      o   In freewais-sf-dir/ir/irfiles.h change
  1465.  
  1466.  
  1467.               #else
  1468.               #define  INDEX_BLOCK_SIZE_SIZE  2
  1469.               #endif
  1470.  
  1471.  
  1472.          to
  1473.  
  1474.  
  1475.               #else
  1476.               #define  INDEX_BLOCK_SIZE_SIZE  3
  1477.               #endif
  1478.  
  1479.  
  1480.      o   In freewais-sf-dir/ir/server.h change
  1481.  
  1482.  
  1483.                         #define  BUFSZ  100000          /*  size  of  our  comm  buffer  */
  1484.  
  1485.  
  1486.          to
  1487.  
  1488.  
  1489.                         #define  BUFSZ  1000000        /*  size  of  our  comm  buffer  */
  1490.  
  1491.  
  1492.      o   In freewais-sf-dir/ui/waissearch.c Change
  1493.  
  1494.  
  1495.                         #define  MAX_MESSAGE_LEN  100000
  1496.  
  1497.  
  1498.          to
  1499.  
  1500.  
  1501.                         #define  MAX_MESSAGE_LEN  BUFSZ
  1502.  
  1503.  
  1504.          The last step will be obsolet in version > 1:0.
  1505.  
  1506.  
  1507.  
  1508.                                                           22
  1509.  
  1510.  
  1511.  
  1512.  
  1513. 11        TODO
  1514.  
  1515.  
  1516. Here is a somewhat adhoc list of things to #x and features to add:
  1517.  
  1518.  
  1519. X11R6       Some might have noticed that the X clients do not (yet) compile with the new X11
  1520.          release. Porting should not be too dif#cult for someone with some X11 Knowledge
  1521.  
  1522. ANSI      Code currently does not pass a strikt ANSI Compiler.  We intend to switch to the
  1523.          Prototyping scheme known from the WWW library:
  1524.  
  1525.  
  1526.          #ifdef  __STDC__
  1527.          #define  ARGS1(t,a)  "
  1528.                                   (t  a)
  1529.          #else   /*  not  ANSI  */
  1530.          #define  ARGS1(t,a)  (a)  "
  1531.                                   t  a;
  1532.          #endif  /*  __STDC__  (ANSI)  */
  1533.  
  1534.  
  1535. waisindex BUGS
  1536.  
  1537.  
  1538.  
  1539.          #lenames      Waisindex has still problems with #lenames.  E.g.  #les with apostophes
  1540.                 or asterics in them are not handled properly.  Filenames with wildcards may
  1541.                 enter the #lename table despite the fact, that they do not exists.
  1542.  
  1543.          -a   The -a #ag is not handled properly. Adding a #le, which contains only a subset
  1544.                 of the declared #elds causes the other #elds to be ignored by the server until a
  1545.                 #complete# document is added.
  1546.  
  1547. Compressed Indexes             There are several know methods for compressing inverted #les which
  1548.          could save us disc space and signi#catly improve search speed.
  1549.  
  1550. Spatial Indexes        (Notes from Doug Nebert)
  1551.  
  1552.          We would like to add a #eld type into the SF software which would allow for the
  1553.          parsing of and indexing of geographic coordinates that describe the outline of a data
  1554.          set or document.  Software has been written outside of SF to do the parsing (using
  1555.          #ex), and the indexing and overlay routines have been included into the freeWAIS-0.3
  1556.          code.  Now we need to integrate the code so that we can perform full #eld searching
  1557.          of text, dates, numbers, and geography in one indexing system.
  1558.  
  1559. Forms      (Notes from Doug Nebert)
  1560.  
  1561.          It seems to me that if the SF crowd can consistently use the .fde #le incorporated into
  1562.          the available .src #le that a functionality like "explain" can be developed to allow the
  1563.          client to determine what attributes are being used and formulate a query window to
  1564.          match it.  probably easier would be to have a "form" resource #le which could be
  1565.          retrieved from the server (e.g. query.html) by a "smart" http client...
  1566.  
  1567. Relevance Feedback            Notice, that the thing build in freeWAIS* is not #Relevance Feed-
  1568.          back#. It is rathersome kind of query expansion. Real Relevance Feedback is proved
  1569.          to produce much more effective ranking.
  1570.  
  1571. update      (Notes from Marc Edgar)
  1572.  
  1573.          How about having a script that could automatically update a the database.  That is, a
  1574.          record would be kept of which #les were in the database.  This record (.rec or some
  1575.          such) could be used instead of having to remember or #nd the command that created
  1576.          it. That is, it would support something like,
  1577.  
  1578.  
  1579.                       waisindex  -update  filename.rec
  1580.  
  1581.  
  1582.  
  1583.                                                           23
  1584.  
  1585.  
  1586.  
  1587.  
  1588.          to rebuild the database.
  1589.  
  1590. format #les       (Notes from Marc Edgar)
  1591.  
  1592.          Programs like this become immortal when they do not take any special knowlege to
  1593.          use. Format #les for common data types would make FreeWAIS-sf more accessible.
  1594.          Maybe you've already done this but format #les like, FAQ.fmt, email.fmt, usenet.fmt
  1595.          would be very helpful,  (and probably not that hard to write.)   Maybe creating an
  1596.          incoming directory on your ftp server would be useful, so that users could post their
  1597.          .fmt #les and save you from having to do the work.
  1598.  
  1599. Z39.50 V2       (Notes from Doug Nebert)
  1600.  
  1601.          It seems that the functionality you have provided matches very well the basic abilities
  1602.          of Z39.50 V2 and V3 in terms of #elds and search.  If there were a way to identify
  1603.          registered attributes then the construction of a gateway from ZDIST to an FreeWAIS-
  1604.          sf store of data would be possible, allowing people to keep their data in one format
  1605.          and serve the V1 and non V1 communities.
  1606.  
  1607.          My  thoughts  regarding  a  linkage  between  FreeWAIS-sf  and  a  full  Z39.50  V2-3
  1608.          release such as ZDIST were to provide a link into the new capabilities and other
  1609.          "compliant" clients out there.  But I think much of the API work could be done with
  1610.          the help of CNIDR personnel # their "linkage" back into freeWAIS-0.3 disabled some
  1611.          of the functionality whereas FreeWAIS-sf is more on the same level of sophistication
  1612.          as V2 and should be easier to connect to. If such a connection can be made it would
  1613.          allow  you  all  to  maintain  and  enhance  the  existing  code  and  have  some  partners
  1614.          out here work on maintaining the API connection, taking the load off you except in
  1615.          consultation : : :
  1616.  
  1617. Fields    Note from Alberto Accomazzi (Darin McKeever proposed similar features).
  1618.  
  1619.          First of all,  when indexing the documents,  the user should be able to specify the
  1620.          following for each #eld to be indexed:
  1621.  
  1622.  
  1623.              o  minimum word length
  1624.  
  1625.              o  set of characters composing the terms # i.e. the delimiter set
  1626.  
  1627.              o  synonym #le
  1628.  
  1629.              o  stopword #le
  1630.  
  1631.          This could be done by allowing the entries in the format #le to look like:
  1632.  
  1633.  
  1634.                      <field>  /^Authors:  /
  1635.                      au  TEXT  BOTH  minchars  2  word  /[^  ;"n=()]+/
  1636.                             stop  abstracts_field_au.stop  syn  abstracts_field_syn.syn
  1637.                      <end>
  1638.  
  1639.  
  1640.          Other things such as headline length should be speci#able in the .fmt #le as well.
  1641.  
  1642. Documentation           Counting the mails I receive every day leads to the conclusion that there
  1643.          is a lack of documentation.
  1644.  
  1645.          man    The online manuals are out of date.
  1646.  
  1647.          document specs         Many people have dif#culties in building document speci#cations.
  1648.                 Either there should be a nicer input format or someone should provide a compiler
  1649.                 (+checking and testing?) for some prettier speci#cation format.
  1650.  
  1651.          other systems       There  should  be  more  info  on:  How  do  i  use  FreeWAIS-sf  with
  1652.                 Gopher, Mosaic, httpd, perl, : : :
  1653.  
  1654.          : : :
  1655.  
  1656.  
  1657.  
  1658.                                                           24
  1659.  
  1660.  
  1661.  
  1662.  
  1663. A       new WWW.cf
  1664.  
  1665. /*  Version  numbers  of  library,  daemon,  and  client:  */
  1666. #define  LibwwwVersion  2.17
  1667. #define  DaemonVersion  3.0
  1668.  
  1669.  
  1670.  
  1671. /*  Where  to  install  binaries?  */
  1672. BINDIR  =  /usr/local/infosystems/WWW/bin
  1673.  
  1674.  
  1675.  
  1676. /*  Do  you  want  to  compile  the  WAIS  gateway?  If  yes,  where  is  freeWAIS
  1677.      located?
  1678. */
  1679. #define  FreeWAIS_sf  YES
  1680. #define  FreeWAIS_02  NO
  1681. #define  FreeWAIS_03  NO
  1682. #define  FreeWais  (FreeWAIS_02  __  FreeWAIS_03)
  1683.  
  1684. #if  FreeWais
  1685. /*  WAISDIR  =  /usr/local/infosystems/freeWAIS-0.2  */
  1686. WAISDIR  =  /usr/local/infosystems/freeWAIS-0.3
  1687. WAISLIBDIR  =  $(WAISDIR)/bin
  1688. WAISINCDIR  =  $(WAISDIR)/ir
  1689. #endif
  1690.  
  1691. #if  FreeWAIS_sf
  1692. WAISDIR  =  /usr/local/infosystems/freeWAIS-sf-1.0
  1693. WAISLIBDIR  =  $(WAISDIR)/ir
  1694. WAISINCDIR  =  $(WAISDIR)/ir
  1695. #endif
  1696.  
  1697.  
  1698.  
  1699. /*
  1700.   *  If  you  don't  want  to  use  GCC  for  compilation,  but  the  compiler  defaulted  in
  1701.   *  Imake's  configuration  files,  set  UseGcc  to  NO.  If  you  want  to  change  the
  1702.   *  native's  compiler  default  options,  set  CCOPTIONS  and/or  CDEBUGFLAGS  as
  1703.   *  needed,  preferrably  depending  on  the  architectur  as  show  below.
  1704.   */
  1705.  
  1706. #define  UseGcc  YES
  1707.  
  1708. #if  UseGcc     /*  use  GNU  C  compiler:  */
  1709.  
  1710.                CC  =  gcc  -fpcc-struct-return
  1711.    CCOPTIONS  =
  1712.  
  1713. #if  defined  (SunArchitecture)  &&  !defined  (i386Architecture)  &&  !defined
  1714. (SparcArchitecture)
  1715.    CCOPTIONS  =  -m68881
  1716. #endif  /*  Sun-3  */
  1717.  
  1718. #else     /*  use  native  C  compiler:  */
  1719.  
  1720. #if  defined  (HPArchitecture)  &&  defined  (hp9000s800)
  1721. CCOPTIONS  =  -Aa  -D_HPUX_SOURCE  -Wl,+b  $(USRLIBDIR)  -Wl,+s
  1722. #endif  /*  HPArchitecture  */
  1723.  
  1724. #if  defined  (XyzArchitecture)  /*  e.  g.  IBMArchitecture,  SGIArchitecture  etc.  */
  1725.                CC  =  compiler-to-use
  1726.    CCOPTIONS  =  compiler-options
  1727. #endif  /*  XyzArchitecture  */
  1728.  
  1729. #endif  /*  UseGcc  */
  1730.  
  1731.  
  1732.  
  1733.                                                           25
  1734.  
  1735.  
  1736.  
  1737.  
  1738. /*  No  need  to  modify  anything  below  here  */
  1739.  
  1740.  
  1741.  
  1742.   LIBWWWDIR  =  $(TOP)/Library/Implementation
  1743.        LIBWWW  =  -L$(LIBWWWDIR)  -lwww
  1744.   DEPLIBWWW  =  $(LIBWWWDIR)/libwww.a
  1745.  
  1746. #if  FreeWais
  1747.      LIBWAIS  =  $(WAISLIBDIR)/client.a  $(WAISLIBDIR)/wais.a
  1748. DEPLIBWAIS  =  $(LIBWAIS)
  1749. #endif
  1750.  
  1751. #if  FreeWaisSf
  1752.      LIBWAIS  =  $(WAISLIBDIR)/libclient.a  $(WAISLIBDIR)/libwais.a
  1753. DEPLIBWAIS  =  $(LIBWAIS)
  1754. #endif
  1755.  
  1756.  
  1757.  
  1758. /*  Imake  rule  to  create  a  generic  name  as  a  link  */
  1759. #ifndef  InstallAsLink
  1760. #define  InstallAsLink(file,link,dir)  @@"
  1761. install::  file                                     @@"
  1762.              set  -x;  cd  dir;  "                   @@"
  1763.              $(RM)  link;  "                          @@"
  1764.              $(LN)  file  link
  1765. #endif
  1766.  
  1767.  
  1768.  
  1769. B       Maintaining Databases
  1770.  
  1771.  
  1772. Here is what I use to maintain my databases.  Most of the tricky stuff is handled by this
  1773. Imake#le:
  1774.  
  1775. #  Imakefile  --  Imakefile  to  update  wais  databases
  1776. #  Author                :  Ulrich  Pfeifer
  1777. #  Created  On          :  Thu  Feb  13  16:01:48  1992
  1778. #  Last  Modified  By:  Ulrich  Pfeifer
  1779. #  Last  Modified  On:  Mon  Aug  22  13:45:31  1994
  1780. #  Update  Count       :  238
  1781. #  Status                :  Unknown,  Use  with  caution!
  1782.  
  1783. #  HISTORY
  1784. #  21-Feb-1992                  Ulrich  Pfeifer
  1785. #       Last  Modified:  Tue  Feb  18  11:01:45  1992  #8  (Ulrich  Pfeifer)
  1786. #       Changed  IRDIGEST
  1787. #  18-Feb-1992                  Ulrich  Pfeifer
  1788. #       Last  Modified:  Fri  Feb  14  12:06:41  1992  #7  (Ulrich  Pfeifer)
  1789. #       Added  bibdb  format
  1790. #  14-Feb-1992                  Ulrich  Pfeifer
  1791. #       Last  Modified:  Thu  Feb  13  18:14:24  1992  #2  (Ulrich  Pfeifer)
  1792. #       Added  Emacs-info
  1793.  
  1794. #undef  DEBUG
  1795. #undef  CHECK_ONLY
  1796.  
  1797. #  Commands
  1798.                         LS  =  /bin/ls
  1799.                       CMP  =  /bin/cmp
  1800.              WAISINDEX  =  /usr/local/ls6/wais/bin/waisindex  -nopairs  -nocat  -export
  1801.                      PERL  =  /usr/local/bin/perl
  1802.                   TMPDIR  =  /tmp
  1803.  
  1804.              SERVERDIR  =  /usr/local/ls6/wais/wais-sources
  1805.  
  1806.                MAILSERV  =  /home/crew/mailserv
  1807.              NOSFERATU  =  $-MAILSERV"/Mail/NOSFERATU
  1808.  
  1809.  
  1810.  
  1811.                                                           26
  1812.  
  1813.  
  1814.  
  1815.  
  1816.                      SCOG  =  $-MAILSERV"/Mail/SCOG
  1817.  
  1818.  
  1819.  
  1820.              LWAISHOME  =  /usr/wais
  1821.           WAISDOCSDIR  =  $-LWAISHOME"/wais-docs
  1822.                WAISDOCS  =  $-WAISDOCSDIR"/wais-docs
  1823.  
  1824.                 PFEIFER  =  /home/crew/pfeifer
  1825.                SUNFLASH  =  $(WAISDOCSDIR)/SunFlash  $(PFEIFER)/Mail-public/SunFlash
  1826.                 SUGINFO  =  $(WAISDOCSDIR)/sug-info  $(PFEIFER)/Mail-public/sug-info
  1827.  
  1828.           IRDIGESTSRC  =  $-WAISDOCSDIR"/IRLIST.abstracts
  1829.            BIBDB_HTML  =  $-WAISDOCSDIR"/bibdb.html
  1830.                   HCIBIB  =  $-WAISDOCSDIR"/hcibib
  1831.                      DEMO  =  $-WAISDOCSDIR"/demo.html
  1832.                JOURNALS  =  $-WAISDOCSDIR"/journals
  1833.              LIBRARIES  =  $-WAISDOCSDIR"/libraries.america.gz
  1834.                       FAQ  =  /usr/local/ls6/doc/faql
  1835.                 WWWHOME  =  /usr/WWW/pages
  1836.                 FTPHOME  =  /local-home/ftp/pub/doc
  1837. NOSFERATU_GLOSSAY  =  /usr/local/ls6/src+data/src/nosferatu/glossary
  1838.  
  1839.  
  1840.  
  1841. #define  WaisCleanTarget(database)                                                              @@"
  1842. veryclean::                                                                                                 @@"
  1843.              $-RM"  Concat(database,.cat)  Concat(database,.dct)  "
  1844.              Concat(database,.dlm)  Concat(database,.doc)  "
  1845.              Concat(database,.fn)  Concat(database,.hl)  "
  1846.              Concat(database,.inv)  Concat(database,.src)  "
  1847.              Concat(database,_field_*)                                                              @@"
  1848.                                                                                                                   @@"
  1849. Concat(database,.fmt):                                                                               @@"
  1850.              touch  Concat(database,.fmt)
  1851. /*
  1852.   *  WaisIndexProc,  the  working  horse
  1853.   */
  1854. #ifdef  CHECK_ONLY
  1855. #define  WaisIndexProc(database,  type,  sources,  options)  "
  1856.              echo  Database  database  needs  reindexing  ;
  1857. #else  /*  CHECK_ONLY  */
  1858. #define  WaisIndexProc(database,  type,  sources,  options)  "
  1859.              cp  Concat(database,.fmt)  $(TMPDIR)/Concat(database,.fmt)  ;  "       @@"
  1860.              $(WAISINDEX)  options  -t  type  -d  $(TMPDIR)/database  sources  ;  "   @@"
  1861.              if  test  -f  $(TMPDIR)/Concat(database,.src)  ;  then  "                     @@"
  1862.                    echo  Indexing  of  database  was  successfull  ;  "                        @@"
  1863.                    $(RM)  $(TMPDIR)/Concat(database,.fmt)  ;  "                              @@"
  1864.                    mv  $(TMPDIR)/database/**/*  .  ;  "                                            @@"
  1865.                    if  test  -f  manifest   ;  then  "                                                 @@"
  1866.                         mv  manifest   Concat(database,-MANIFEST);  "                        @@"
  1867.                    fi  ;  "                                                                                      @@"
  1868.              else  "                                                                                            @@"
  1869.                    echo  Indexing  of  database  failed  ;  "                                      @@"
  1870.                    $(RM)  $(TMPDIR)/database/**/*  manifest  ;  "                             @@"
  1871.              fi  ;
  1872. #endif  /*  CHECK_ONLY  */
  1873.  
  1874. /*
  1875.   *  WaisOptionTarget  -  the  normal  case
  1876.   */
  1877. #define  WaisOptionTarget(database,  type,  sources,  options)                      @@"
  1878. all::  Concat(database,.doc)                                                                       @@"
  1879.                                                                                                                   @@"
  1880. Concat(database,.doc):  Concat(database,.fmt)  sources                                @@"
  1881.              WaisIndexProc(database,  type,  sources,  options)                           @@"
  1882. WaisCleanTarget(database)
  1883.  
  1884. #define  WaisTarget(database,  type,  sources)                                              @@"
  1885.  
  1886.  
  1887.  
  1888.                                                           27
  1889.  
  1890.  
  1891.  
  1892.  
  1893. WaisOptionTarget(database,  type,  sources,)
  1894.  
  1895. /*
  1896.   *  WaisDir2TargetOpt  index  a  directory,  if  /bin/ls  signals  change
  1897.   */
  1898. #define  WaisDir2Target(database,  type,  lsargs,  sources,  options)             @@"
  1899. all::  database  Concat(database,.doc)                                                         @@"
  1900.                                                                                                                   @@"
  1901. database  Concat(database,-MANIFEST):                                                         @@"
  1902.              @echo  Testing  sou/**/rces  of  database                                           @@"
  1903.              @$-LS"  -l  lsargs  _  grep  -v  MANIFEST  >  manifest;  "
  1904.              if  $-CMP"  Concat(database,-MANIFEST)  manifest;  "
  1905.              then  "
  1906.                   echo  "No  differences  encountered";  "
  1907.                   $-RM"  manifest;  "
  1908.              else  "
  1909.                   WaisIndexProc(database,  type,  sources,  options)  "
  1910.              fi;                                                                                                 @@"
  1911.                                                                                                                   @@"
  1912. Concat(database,.doc):  Concat(database,.fmt)                                            @@"
  1913.              WaisIndexProc(database,  type,  sources,  options)                           @@"
  1914.                                                                                                                   @@"
  1915. clean::                                                                                                       @@"
  1916.              $-RM"   manifest                                                                              @@"
  1917.                                                                                                                   @@"
  1918. clean::                                                                                                       @@"
  1919.              $-RM"  Concat(database,-MANIFEST)                                                   @@"
  1920.                                                                                                                   @@"
  1921. WaisCleanTarget(database)
  1922.  
  1923. #define  WaisDirTarget(database,  type,  sources,  options)  "
  1924.              WaisDir2Target(database,  type,  sources,  sources,  options)
  1925. /*
  1926.   *  The  databases
  1927.   */
  1928. #ifdef  DEBUG
  1929. WaisDirTarget(test,fields,TEST,-r)
  1930. WaisTarget(test1,fields,TEST)
  1931. WaisOptionTarget(test2,fields,TEST,  -T  HTML)
  1932. WaisDir2Target(test3,fields,TEST,TEST,  -T  HTML)
  1933. #else  /*  DEBUG  */
  1934. #define  WSRCPAT  *.src
  1935. WaisDirTarget(directory-of-servers,server,Concat($-SERVERDIR"/,WSRCPAT),)
  1936. WaisDirTarget(journals,fields,$(JOURNALS),-r)
  1937. WaisDirTarget(nosferatu-glossary,text  -T  HTML,$-NOSFERATU_GLOSSAY",-r)
  1938. WaisDirTarget(wais-docs,text,$-WAISDOCS",-r)
  1939. WaisDirTarget(www-pages,fields,`find  $(WWWHOME)  -type  f  -name  "*.html"
  1940. "
  1941. -print`,  -t  URL  $(WWWHOME)  "@@http://ls6-www.informatik.uni-dortmund.de)
  1942. WaisDirTarget(ftp-pages,fields,`find  $(FTPHOME)  -type  f  -name  "*.html"
  1943. "
  1944. -print`,  -t  URL  $(FTPHOME)  "@@ftp://ls6-www.informatik.uni-dortmund.de/pub/doc)
  1945. WaisDir2Target(HCIBIB,fields,  $(HCIBIB),  `$(PERL)  -e  'for  "
  1946. (<$(HCIBIB)/*".html.gz>)  -  s/.gz/"n/;  print  "'`,  -T  HTML  -stop  HCIBIB.stop)
  1947. WaisOptionTarget(bibdb-html,fields,$-BIBDB_HTML",  -T  HTML)
  1948. WaisOptionTarget(demo,fields,$-DEMO",  -T  HTML)
  1949. WaisOptionTarget(ls6-help,formfeed,$-FAQ",-T  HTML)
  1950. WaisTarget(INFO,server,$-SERVERDIR"/bibdb-html.src  $-SERVERDIR"/journals.src)
  1951. WaisTarget(irdigest,fields,$-IRDIGESTSRC")
  1952. WaisTarget(libraries,dash,$(LIBRARIES))
  1953. WaisTarget(nosferatu,mail_or_rmail,$-NOSFERATU")
  1954. WaisTarget(scog,mail_or_rmail,$-SCOG")
  1955. WaisTarget(suginfo,mail_or_rmail,$-SUGINFO")
  1956. WaisTarget(sunflash,mail_or_rmail,$-SUNFLASH")
  1957. #endif  /*  DEBUG  */
  1958.  
  1959.  
  1960.  
  1961.                                                           28
  1962.